﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Core;
using System.Configuration;
using Crosland.Automotriz.Seguridad.ControlExeption;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmTipoCambio : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        clsT_Mae_Tipo_CambioLogic cls_tipo_cambio = null;
        clsTd_MonedaLogic cls_moneda = null;
        T_MAE_TIPO_CAMBIO t_tipo_cambio = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {

                this.ListaMeses();
                this.ListaAnio();
                cboMes.Value = Convert.ToString(DateTime.Now.Month);
                cboAnio.Value = Convert.ToString(DateTime.Now.Year);
                this.ListarTipoCambio();
                this.ListaMoneda();
                cboMoneda.SelectedIndex = 1;
                cboMonedaDestino.SelectedIndex = 0;
                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
            }
        }

        private void ListaMeses()
        {
            try
            {
                cls_tipo_cambio = new clsT_Mae_Tipo_CambioLogic();
                cboMes.DataSource = cls_tipo_cambio.listaMeses();
                cboMes.TextField = "des_mes";
                cboMes.ValueField = "nro_mes";
                cboMes.DataBind();
                //cboMes.Items[0].Selected = true;
            }
            catch (DataException e)
            {
                lblmsj.Text = string.Empty;
                lblmsj.Text = "Error al Listar meses! " + e.Message;
                popupmsj.ShowOnPageLoad = true;
                MensajesError(e.Message, e, "ListaMeses");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "ListaMeses");
            }
        }
        
        private void ListaAnio()
        {
            try
            {
                cls_tipo_cambio = new clsT_Mae_Tipo_CambioLogic();
                cboAnio.DataSource = cls_tipo_cambio.listaAnio();
                cboAnio.TextField = "num_anio";
                cboAnio.ValueField = "num_anio";
                cboAnio.DataBind();
                //cboMes.Items[0].Selected = true;
            }
            catch (DataException e)
            {
                lblmsj.Text = string.Empty;
                lblmsj.Text = "Error al Listar años! " + e.Message;
                popupmsj.ShowOnPageLoad = true;
                MensajesError(e.Message, e, "ListaAnio");
            }
            catch (Exception re)
            {
                MensajesError(re.Message, re, "ListaAnio");
            }
        }
        
        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "GuardarExceptionLog");
                MensajesError(e.Message, e, "GuardarExceptionLog");
            }

        }
        
        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }
        
        private void ListarTipoCambio()
        {
            cls_tipo_cambio = new clsT_Mae_Tipo_CambioLogic();
            grdTipoCambio.DataSource = cls_tipo_cambio.lista(Convert.ToInt32(cboMes.Value),Convert.ToInt32(cboAnio.Value));
            grdTipoCambio.DataBind();


        }

        private void ListaMoneda()
        {
            IEnumerable<Object> list = new List<Object>();
            cls_moneda = new clsTd_MonedaLogic();
            list = cls_moneda.lista();
            cboMoneda.DataSource = list;
            cboMoneda.ValueField = "ID_MONEDA";
            cboMoneda.TextField = "DES_MONEDA";
            cboMoneda.DataBind();

            cboMonedaDestino.DataSource = list;
            cboMonedaDestino.ValueField = "ID_MONEDA";
            cboMonedaDestino.TextField = "DES_MONEDA";
            DataBind();

            cboMoneda.Items[0].Selected = true;
            cboMonedaDestino.Items[0].Selected = true;
        }

        private void Grabar()
        {
            try
            {
                Nullable<DateTime> fecha = null;
                cls_tipo_cambio = new clsT_Mae_Tipo_CambioLogic();
                t_tipo_cambio = new T_MAE_TIPO_CAMBIO();
                t_tipo_cambio.ID_MONEDA = cboMoneda.Text == "" ? 0 : Convert.ToInt32(cboMoneda.Value);
                t_tipo_cambio.ID_MONEDA_REF = cboMonedaDestino.Text == "" ? 0 : Convert.ToInt32(cboMonedaDestino.Value);
                t_tipo_cambio.FEC_CAMBIO = ddFecha_cambio.Date == null ? fecha : ddFecha_cambio.Date;
                t_tipo_cambio.IMP_VENTA = txtImporteVenta == null ? 0 : Convert.ToDecimal(txtImporteVenta.Text);
                t_tipo_cambio.IMP_COMPRA = txtImporCompra == null ? 0 : Convert.ToDecimal(txtImporCompra.Text);
                if (cls_tipo_cambio.Insertar(t_tipo_cambio))
                {
                    this.ListarTipoCambio();
                    this.ListaMeses();
                    lblmsj.Text = string.Empty;
                    lblmsj.Text = "Se grabo correctamente!";
                    PopupMantenimiento.ShowOnPageLoad = false; popupmsj.ShowOnPageLoad = true;
                }
            }

            catch (DataException e)
            {
                String mensajesError = String.Empty;
                
                lblmsj.Text = string.Empty;
                lblmsj.Text = "Error: " + Environment.NewLine + mensajesError;
                popupmsj.ShowOnPageLoad = true;
                MensajesError(e.Message, e, "Grabar");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "Grabar");
            }

        }

        private void Actualizar()
        {
            try
            {
                Nullable<DateTime> fecha_null = null;

                t_tipo_cambio = new T_MAE_TIPO_CAMBIO();
                cls_tipo_cambio = new clsT_Mae_Tipo_CambioLogic();
                t_tipo_cambio.ID_MAE_TIPO_CAMBIO = Convert.ToInt32(grdTipoCambio.GetRowValues(grdTipoCambio.FocusedRowIndex, "ID_MAE_TIPO_CAMBIO"));
                t_tipo_cambio.ID_MONEDA = cboMoneda.Text == "" ? 0 : Convert.ToInt32(cboMoneda.Value);
                t_tipo_cambio.ID_MONEDA_REF = cboMonedaDestino.Text == "" ? 0 : Convert.ToInt32(cboMonedaDestino.Value);
                t_tipo_cambio.FEC_CAMBIO = ddFecha_cambio.Text == "" ? fecha_null : (ddFecha_cambio.Date);
                t_tipo_cambio.IMP_VENTA = txtImporteVenta == null ? 0 : Convert.ToDecimal(txtImporteVenta.Text);
                t_tipo_cambio.IMP_COMPRA = txtImporCompra == null ? 0 : Convert.ToDecimal(txtImporCompra.Text);
                if (cls_tipo_cambio.Modificar(t_tipo_cambio))
                {
                    this.ListarTipoCambio();
                    this.ListaMeses();

                    lblmsj.Text = string.Empty;
                    lblmsj.Text = "Se actualizó correctamente!";
                    PopupMantenimiento.ShowOnPageLoad = false; popupmsj.ShowOnPageLoad = true;
                }
               
            }
            catch (DataException e)
            {
                String mensajesError = String.Empty;
                while (e != null)
                {
                    //mensajesError += e.Message + Environment.NewLine;
                    //e = e.InnerException;
                }
                lblmsj.Text = string.Empty;
                lblmsj.Text = "Error: " + Environment.NewLine + mensajesError;
                popupmsj.ShowOnPageLoad = true;
                MensajesError(e.Message, e, "Actualizar");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "Actualizar");
            }


        }

        private void CargarDatosModificar()
        {
            int i = grdTipoCambio.FocusedRowIndex;
            cboMoneda.Value = grdTipoCambio.GetRowValues(i, "ID_MONEDA").ToString();
            cboMonedaDestino.Value = grdTipoCambio.GetRowValues(i, "ID_MONEDA_REF").ToString();
            txtImporCompra.Text = grdTipoCambio.GetRowValues(i, "IMP_COMPRA").ToString();
            txtImporteVenta.Text = grdTipoCambio.GetRowValues(i, "IMP_VENTA").ToString();
            ddFecha_cambio.Date = DateTime.Today;
        }

        private void LimpiarControles()
        {
            txtImporCompra.Text = String.Empty;
            txtImporteVenta.Text = String.Empty;
            ddFecha_cambio.Text = String.Empty;

        }

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            this.ListarTipoCambio();
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            Session["op"] = "N";
            this.LimpiarControles();
            PopupMantenimiento.ShowOnPageLoad = true;
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            Session["op"] = "M";
            this.CargarDatosModificar();
            PopupMantenimiento.ShowOnPageLoad = true;
        }

        protected void btnPopGrabar_Click(object sender, EventArgs e)
        {
            if (Session["op"].ToString() == "N") { this.Grabar(); } else if (Session["op"].ToString() == "M") { this.Actualizar(); } else { return; }
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Session["op"] = null;
            Response.Redirect("~/Repuestos/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void grdTipoCambio_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListarTipoCambio();
        }

        protected void grdTipoCambio_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListarTipoCambio();
        }


    }
}